package com.are.odisea;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

public class ManejadorMensajes {
	private db conexion = null;
	private Mensajes men;
	
	public static final int ORDER_ID = 1;
	public static final int ORDER_FEC_REG = 2;


	public ManejadorMensajes(db conexion) {
		super();
		this.setConexion(conexion);
		this.setMen(new Mensajes());
	}
	public ManejadorMensajes(db conexion, Mensajes men) {
		super();
		this.setConexion(conexion);
		this.setMen(men);
	}
	public db getConexion() {
		return conexion;
	}
	public void setConexion(db conexion) {
		this.conexion = conexion;
	}
	public Mensajes getMen() {
		return men;
	}
	public void setMen(Mensajes men) {
		this.men = men;
	}
	public boolean add() throws SQLException{
		boolean result = false;

			String sql = "insert into mensajes (asunto,mensaje,usuario,estado) values (?,?,?,?)";
			java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
			pst.setString(1, men.getAsunto());
			pst.setString(2, men.getMensaje());
			pst.setString(3, men.getUsuario());
			pst.setString(4, men.getEstado());
			if (conexion.Update(pst) > 0) {
				conexion.Commit();
				result = true;
			}
		return result;
	}
	
	public boolean update(String key) throws SQLException{
		boolean result = false;

			String sql = "update noticias set asunto= ?, mensaje=? where id=?";
			
			java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
			pst.setString(1, men.getAsunto());
			pst.setString(2, men.getMensaje());
			pst.setString(3, key);
			
			if (conexion.Update(pst) > 0) {
				conexion.Commit();
				result = true;
			}
			
		return result;
	}
	
	public boolean remove(String key) throws SQLException {
		boolean result = false;

			String sql = "delete from mensajes where id=?";
			java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
			pst.setString(1,key);
			if (conexion.Update(pst) > 0) {
				conexion.Commit();
				result = true;
			}
			

		return result;	
	}
	
	
	public boolean exist(String key) throws SQLException {
		boolean result = false;

			String sql = "select * from mensajes where id = ?";
			java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
			pst.setString(1,key);
			ResultSet rs = conexion.Query(pst);
			if (rs.next()) {
				result = true;
			}
			rs.close();
			
		
		return result;	
	}
	
	public boolean Find(String key) throws SQLException {
		boolean result = false;

			String sql = "select * from vmensajes where id=?";
			java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
			pst.setString(1,key);
			ResultSet rs = conexion.Query(pst);
			if (rs.next()) {
				men = new Mensajes();
				men.setAsunto(rs.getString("asunto"));
				men.setMensaje(rs.getString("mensaje"));
				men.setFec_reg(rs.getString("fec_reg"));
				men.setEstado(rs.getString("estado"));
				men.setUsuario(rs.getString("usuario"));
				men.setNomusuario(rs.getString("nomusuario"));
				men.setId(rs.getString("id"));
				men.setAdjuntos(rs.getInt("adjuntos"));
				result = true;
			}
			rs.close();
		return result;	
	}
	
	public ArrayList<Mensajes> list() throws SQLException {
		ArrayList<Mensajes> mens = new ArrayList<Mensajes>();
		
			String sql = "select * from vmensajes order by fec_reg";
			ResultSet rs  = conexion.Query(sql);
			while(rs.next()) {
				Mensajes m = new Mensajes();
				m.setAsunto(rs.getString("asunto"));
				m.setMensaje(rs.getString("mensaje"));
				m.setFec_reg(rs.getString("fec_reg"));
				m.setEstado(rs.getString("estado"));
				m.setUsuario(rs.getString("usuario"));
				m.setNomusuario(rs.getString("nomusuario"));
				m.setId(rs.getString("id"));
				m.setAdjuntos(rs.getInt("adjuntos"));
				mens.add(m);
			}
			rs.close();
		return mens;
	}
	
	public ArrayList<Mensajes> list(int orden) throws SQLException {
		ArrayList<Mensajes> mens = new ArrayList<Mensajes>();

			String sql = "select * from vmensajes";
			
			switch(orden) {
			case ORDER_ID:
				sql += " order by id";
			break;
			case ORDER_FEC_REG:
				sql += " order by fec_reg desc";
			break;
			}
			ResultSet rs  = conexion.Query(sql);
			while(rs.next()) {
				Mensajes m = new Mensajes();
				m.setAsunto(rs.getString("asunto"));
				m.setMensaje(rs.getString("mensaje"));
				m.setFec_reg(rs.getString("fec_reg"));
				m.setEstado(rs.getString("estado"));
				m.setUsuario(rs.getString("usuario"));
				m.setNomusuario(rs.getString("nomusuario"));
				m.setId(rs.getString("id"));
				m.setAdjuntos(rs.getInt("adjuntos"));
				mens.add(m);
			}
			rs.close();
		return mens;
	}
	
	public ArrayList<Mensajes> listMIsNot(String usu, int orden) throws SQLException {
		ArrayList<Mensajes> mens = new ArrayList<Mensajes>();

			String sql = "select * from Vmensajes where usuario='"+usu+"'";
			
			switch(orden) {
			case ORDER_ID:
				sql += " order by id";
			break;
			case ORDER_FEC_REG:
				sql += " order by fec_reg desc";
			break;
			}
			ResultSet rs  = conexion.Query(sql);
			while(rs.next()) {
				Mensajes m = new Mensajes();
				m.setAsunto(rs.getString("asunto"));
				m.setMensaje(rs.getString("mensaje"));
				m.setFec_reg(rs.getString("fec_reg"));
				m.setEstado(rs.getString("estado"));
				m.setUsuario(rs.getString("usuario"));
				m.setNomusuario(rs.getString("nomusuario"));
				m.setId(rs.getString("id"));
				m.setAdjuntos(rs.getInt("adjuntos"));
				mens.add(m);
			}
			rs.close();
		return mens;	
	}
	public ArrayList<Mensajes> listNotTer(String usu, int orden, String filtro) throws SQLException {
		ArrayList<Mensajes> mens = new ArrayList<Mensajes>();
		String sql="";	
		if(filtro==""){
				sql="select * from Vmensajes order by fec_reg desc limit 10";
			}else{
				sql = "select * from Vmensajes";
				sql+=" where (id in";
				sql+=" (select id from permisos_mensajes where usuarios_id='"+usu+"')";
				sql+=" or (select rol from usuarios where id='"+usu+"') in (select rol from rol_mensaje where id_men=id)) and (asunto like '%"+filtro+"%' or mensaje like '%"+filtro+"%')"; 
			}
			
			ResultSet rs  = conexion.Query(sql);
			while(rs.next()) {
				Mensajes m = new Mensajes();
				m.setAsunto(rs.getString("asunto"));
				m.setMensaje(rs.getString("mensaje"));
				m.setFec_reg(rs.getString("fec_reg"));
				m.setEstado(rs.getString("estado"));
				m.setUsuario(rs.getString("usuario"));
				m.setNomusuario(rs.getString("nomusuario"));
				m.setId(rs.getString("id"));
				m.setAdjuntos(rs.getInt("adjuntos"));
				mens.add(m);
			}
			rs.close();
		return mens;	
	}
	public ArrayList<Mensajes> listMenxFec(String usu, int orden, String filtro, String FI, String FF) throws SQLException {
		ArrayList<Mensajes> mens = new ArrayList<Mensajes>();
		String sql="";	
		if(filtro==""){
				sql="select * from Vmensajes where fec_reg between '"+FI+"' and '"+FF+"'";
			}else{
				sql = "select * from Vmensajes";
				sql+=" where (id in";
				sql+=" (select id from permisos_mensajes where usuarios_id='"+usu+"')";
				sql+=" or (select rol from usuarios where id='"+usu+"') in (select rol from rol_mensaje where id_men=id)) and (asunto like '%"+filtro+"%' or mensaje like '%"+filtro+"%') and fec_reg between '"+FI+"' and '"+FF+"'"; 
			}
			
			ResultSet rs  = conexion.Query(sql);
			while(rs.next()) {
				Mensajes m = new Mensajes();
				m.setAsunto(rs.getString("asunto"));
				m.setMensaje(rs.getString("mensaje"));
				m.setFec_reg(rs.getString("fec_reg"));
				m.setEstado(rs.getString("estado"));
				m.setUsuario(rs.getString("usuario"));
				m.setNomusuario(rs.getString("nomusuario"));
				m.setId(rs.getString("id"));
				m.setAdjuntos(rs.getInt("adjuntos"));
				mens.add(m);
			}
			rs.close();
		return mens;	
	}
	public ArrayList<Mensajes> listNotTerIni(String usu, int orden) throws SQLException {
		ArrayList<Mensajes> mens = new ArrayList<Mensajes>();

		String sql = "select * from Vmensajes";
		sql+=" where (id in";
		sql+=" (select id from permisos_mensajes where usuarios_id='1')";
		sql+=" or (select rol from usuarios where id='1') in (select rol from rol_mensaje where id_men=id)) order by fec_reg desc limit 0,5"; 

			ResultSet rs  = conexion.Query(sql);
			while(rs.next()) {
				Mensajes m = new Mensajes();
				m.setAsunto(rs.getString("asunto"));
				m.setMensaje(rs.getString("mensaje"));
				m.setFec_reg(rs.getString("fec_reg"));
				m.setEstado(rs.getString("estado"));
				m.setUsuario(rs.getString("usuario"));
				m.setNomusuario(rs.getString("nomusuario"));
				m.setId(rs.getString("id"));
				m.setAdjuntos(rs.getInt("adjuntos"));
				mens.add(m);
			}
			rs.close();
		return mens;	
	}
}
